<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//Ultima verificacion: 08-03-2015
class Notificacion extends CI_Controller {
	//Metodo constructor de la clase
	function __construct(){
		parent::__construct();
		
		//Cargamos el helper form para poder utilizar todas las funciones de el, como subir archivos.
		$this->load->helper('form');
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra un listado con todas las notificaciones activas o inactivas pero NO las borradas segun los filtros aplicados
	//Filtros:
	//Si idCicloLectivo es igual a cero, hay que mostrar todas las notificaciones existentes del ciclo vigente
	//Si idCicloLectivo es distinto de cero, hay que mostrar solo las notificaciones del ciclo en cuestion.
	function consultar($idCicloLectivo=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == '1')){
			//Segunda comprobacion: Que idCicloLectivo pasado sea numerico y mayor o igual que cero.
			if(is_numeric($idCicloLectivo) && $idCicloLectivo>=0){
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para corroborar que exista
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Tercera comprobacion: Que el ciclo lectivo pasado por la url sea existente o bien el id sea igual a cero.
				if($cicloLectivo->num_rows() == 1 || $idCicloLectivo==0){
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los ciclos lectivos
					$listadoCiclosLectivos = $this->m_ciclo_lectivo->buscar();
					
					//Le paso el listado de todos los ciclos lectivos a la vista para que los muestre en un combo de filtrado
					$datos['ciclosLectivos'] = $listadoCiclosLectivos;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Le pasamos a la vista cual es el ciclo lectivo que debe mostrar seleccionado en el combo de filtrado
					//Si el ciclo lectivo pasado por la url es igual a cero entonces hay que seleccionar el ciclo vigente, en caso contrario el que haya sido pasado
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							//Le paso a la vista el id del ciclo lectivo vigente
							$datos['idCicloLectivoSel'] = $cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							//No hay ciclo lectivo seleccionado ni vigente
							$datos['idCicloLectivoSel'] = 0;
						}
					}else{
						//Le paso a la vista el id del ciclo lectivo pasado por la url
						$datos['idCicloLectivoSel'] = $idCicloLectivo;
					}
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Restricciones a la consulta de la busqueda de notificaciones segun el ciclo lectivo seleccionado (Se muestran en la tabla)
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$restriccion = "";
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							$restriccion = " AND notificacion.idCicloLectivo=".$cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							$restriccion = " AND notificacion.idCicloLectivo=0";
						}
					}else{
						$restriccion = " AND notificacion.idCicloLectivo=".$idCicloLectivo;
					}
										
					//Cargo el modelo donde estan los datos de las notificaciones registradas para pedirle un listado con todas ellas segun las restricciones
					$this->load->model('m_notificacion');
					
					//Busco todas las notificaciones segun las restricciones correspondientes, tanto activas como inactivas, menos las borrados(-1)
					$listadoNotificaciones = $this->m_notificacion->buscar($restriccion);
					
					//Le paso el listado de todas las notificaciones a la vista para que las muestre en una tabla
					$datos['notificaciones'] = $listadoNotificaciones;
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
					
					//Cargo la vista donde se muestra la tabla de notificaciones y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_notificaciones', $datos, true);
					
					//Cargo la vista principal con los datos de la vista recien generada
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El o los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para consultar los registros.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo solo se puede llamar con ajax
	//Sirve para eliminar la notificacion pasada por la url
	//El segundo parametro sirve para fitrar las notificaciones en el resultado
	function eliminar($idNotificacion=null, $idCicloLectivo=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == '1')){
			//Segunda comprobacion: Que idNotificacion pasado sea numerico y mayor que cero. Ademas que idCicloLectivo pasado sea numerico y mayor que cero.
			if(is_numeric($idNotificacion) && $idNotificacion>0 && is_numeric($idCicloLectivo) && $idCicloLectivo>0){
				//Cargo el modelo donde estan los datos de las notificaciones registrados
				$this->load->model('m_notificacion');
				
				//Busco a la notificacion que hay que eliminar para corroborar que exista
				$notificacion = $this->m_notificacion->get($idNotificacion);
				
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para corroborar que exista
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Tercera comprobacion: Que la notificacion exista. Ademas que el ciclo lectivo pasado por la url sea existente.
				if($notificacion->num_rows() == 1 && $cicloLectivo->num_rows() == 1){
					//Elimino a la notificacion pasada por la url
					$respuesta = $this->m_notificacion->eliminar($idNotificacion, $this->session->userdata('idUsuarioLog'));
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los ciclos lectivos
					$listadoCiclosLectivos = $this->m_ciclo_lectivo->buscar();
					
					//Le paso el listado de todos los ciclos lectivos a la vista para que los muestre en un combo de filtrado
					$datos['ciclosLectivos'] = $listadoCiclosLectivos;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Le pasamos a la vista cual es el ciclo lectivo que debe mostrar seleccionado en el combo de filtrado
					//Si el ciclo lectivo pasado por la url es igual a cero entonces hay que seleccionar el ciclo vigente, en caso contrario el que haya sido pasado
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							//Le paso a la vista el id del ciclo lectivo vigente
							$datos['idCicloLectivoSel'] = $cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							//No hay ciclo lectivo seleccionado ni vigente
							$datos['idCicloLectivoSel'] = 0;
						}
					}else{
						//Le paso a la vista el id del ciclo lectivo pasado por la url
						$datos['idCicloLectivoSel'] = $idCicloLectivo;
					}
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Restricciones a la consulta de la busqueda de notificaciones segun el ciclo lectivo seleccionado (Se muestran en la tabla)
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$restriccion = "";
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							$restriccion = " AND notificacion.idCicloLectivo=".$cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							$restriccion = " AND notificacion.idCicloLectivo=0";
						}
					}else{
						$restriccion = " AND notificacion.idCicloLectivo=".$idCicloLectivo;
					}
										
					//Cargo el modelo donde estan los datos de las notificaciones registradas para pedirle un listado con todas ellas segun las restricciones
					$this->load->model('m_notificacion');
					
					//Busco todas las notificaciones segun las restricciones correspondientes, tanto activas como inactivas, menos los borrados(-1) que quedaron
					$listadoNotificaciones = $this->m_notificacion->buscar($restriccion);
					
					//Le paso el listado de todas las notificaciones a la vista para que las muestre en una tabla
					$datos['notificaciones'] = $listadoNotificaciones;				
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////					
					//Cargo la vista donde se muestra la tabla de notificaciones
					$this->load->view('v_notificaciones', $datos);
				} else {
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					echo("No existe el registro seleccionado para borrar.");
				}
			} else {
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				echo("No se ha pasado los parametros necesarios para borrar un registro.");
			}			
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			echo("No tiene permiso para borrar un registro.");
		}
	}
		
	//Esto metodo no se puede llamar con ajax
	//Abre la pantalla con el formulario para crear una notificacion nueva
	//El parametro se utiliza para volver al consultar seleccionando el ciclo correcto
	function abrirPantallaCrear($idCicloLectivo=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == '1')){
			//Segunda comprobacion: Que idCicloLectivo pasado sea numerico y mayor o igual que cero
			if(is_numeric($idCicloLectivo) && $idCicloLectivo>=0){
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para comprobar que exista
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Tercera comprobacion: Que el ciclo lectivo pasado por la url sea existente o sea igual que cero.
				if($cicloLectivo->num_rows() == 1 || $idCicloLectivo==0){
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$datos['hashSel'] = random_string('alnum',20);
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Si el ciclo lectivo pasado por la url es igual a cero entonces hay que seleccionar el ciclo vigente, en caso contrario el del que haya sido pasado
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							//Le paso a la vista el id del ciclo lectivo vigente
							$datos['idCicloLectivoSel'] = $cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							//No hay ciclo lectivo seleccionado ni vigente
							$datos['idCicloLectivoSel'] = 0;
						}
					}else{
						//Le paso a la vista el id del ciclo lectivo pasado por la url
						$datos['idCicloLectivoSel'] = $idCicloLectivo;
					}
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los ciclos lectivos
					$listadoCiclosLectivos = $this->m_ciclo_lectivo->buscar();
					
					//Le paso el listado de todos los ciclos lectivos a la vista para que los muestre en un combo de filtrado
					$datos['ciclosLectivos'] = $listadoCiclosLectivos;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de los tipos de notificaciones
					$this->load->model('m_tipo_notificacion');
					
					//Busco todos los tipos de notificaciones activos
					$listadoTiposNotificaciones = $this->m_tipo_notificacion->buscarActivos();
					
					//Le paso el listado de todos los tipos de notificaciones a la vista para que los muestre en un combo seleccionable
					$datos['tiposNotificaciones'] = $listadoTiposNotificaciones;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo la vista donde se muestra el formulario para crear una notificacion y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_notificaciones_crear', $datos, true);
					
					//Cargo la vista principal con los datos de la vista recien generada
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El registro seleccionado no existe
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//No se han pasado los parametros minimos necesarios para crear un registro
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo crea realmente la notificacion. La respuesta se muestra en un iframe dentro del formulario
	function crear($hash=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == '1')){	   
			//Segunda comprobacion: Que se haya pasado por post el ciclo lectivo, la fecha de publicacion, el tipo de notificacion, el titulo y el estado de la notificacion a crear.
			//Ademas que el hash sea alfanumero y tenga 20 caracteres. Ademas que el ciclo lectivo sea numerico y mayor que cero.
			if($hash != "" && strlen($hash) == 20 && is_numeric($this->input->post('cicloLectivo',true)) && $this->input->post('cicloLectivo',true)>0 && $this->input->post('fechaPublicacion',true)!="" && is_numeric($this->input->post('tipoNotificacion',true)) && $this->input->post('tipoNotificacion',true)>0 && $this->input->post('titulo',true) != "" && ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){		
				//Cargo el modelo donde estan los datos de los ciclos lectivos registrados
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para comprobar que existe.
				$cicloLectivo = $this->m_ciclo_lectivo->get($this->input->post('cicloLectivo',true));
				
				//Cargo el modelo donde estan los datos de los tipos de notificaciones
				$this->load->model('m_tipo_notificacion');
				
				//Busco al tipo de notificacion para comprobar que existe.
				$tipoNotificacion = $this->m_tipo_notificacion->get($this->input->post('tipoNotificacion',true));
				
				//Tercera comprobacion: Que el tipo de notificacion pasado sea existente. Ademas que el ciclo lectivo tambien sea existente.
				if($tipoNotificacion->num_rows() == 1 && $cicloLectivo->num_rows() == 1){
					//Cargo el modelo donde estan los datos de los archivos
					$this->load->model('m_archivo');
					
					//Detalles de las configuraciones del archivo a subir
					$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/notificaciones";
					$config['allowed_types'] = 'gif|jpg|png|jpeg|doc|docx|xls|xlsx|pdf|ppt|xppt|pps';
					$config['max_size'] = '10000';
					$this->load->library('upload', $config);
					
					$ultimoIdInsertado = 0;
					$archivo = '';
					//Si no se subio el archivo hacer lo siguiente
					if (!$this->upload->do_upload('archivo')){
						$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones.';
					//Si se subio el archivo hacer lo siguiente
					}else{
						//Datos del archivo subido
						$upload_data = $this->upload->data();
						$archivo = $upload_data['file_name'];
						$extensionArchivo = $upload_data['file_ext'];
						
						//Mensaje que se va a mostrar
						$mensaje = 'Se ha subido el archivo correctamente.';
						
						// Determine Content Type
						switch ($upload_data['file_ext']) {
						  case ".pdf": $ctype="application/pdf"; break;
						  case ".exe": $ctype="application/octet-stream"; break;
						  case ".zip": $ctype="application/zip"; break;
						  case ".doc": $ctype="application/msword"; break;
						  case ".xls": $ctype="application/vnd.ms-excel"; break;
						  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break; 
						  case ".gif": $ctype="image/gif"; break;
						  case ".png": $ctype="image/png"; break;
						  case ".jpeg":
						  case ".jpg": $ctype="image/jpg"; break; 
						  default: $ctype="application/force-download"; 
						}
						
						//Creamos el archivo en la base de datos
						$resultado = $this->m_archivo->crear(random_string('alnum',20).$upload_data['file_ext'], $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/notificaciones", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
						$ultimoIdInsertado = $this->db->insert_id();
					}
										
					//Cargo el modelo donde estan los datos de las notificaciones
					$this->load->model('m_notificacion');
					
					//Formato fecha ARGENTINA
					$fecha1=$this->input->post('fechaPublicacion',true);
					//Formato fecha EEUU
					if($fecha1!="")$fecha2=date("Y-m-d",strtotime($fecha1));
					else $fecha2=null;
					
					//Creamos la notificacion
					$resultado = $this->m_notificacion->crear($this->input->post('cicloLectivo',true), $fecha2, $this->input->post('tipoNotificacion',true), $this->input->post('titulo',true), $this->input->post('descripcion',true), $ultimoIdInsertado, $this->input->post('estado',true), $this->session->userdata('idUsuarioLog'));
										
					if($resultado == 1){
						$ultimoIdInsertado = $this->db->insert_id();
						
						//Cargo el modelo donde estan los datos de los destinatarios de una notificacion
						$this->load->model('m_destinatarioxnotificacion');
						
						//Activamos todos los destinatarios que creamos en el formulario CREAR NOTIFICACION
						$resultado = $this->m_destinatarioxnotificacion->activar($ultimoIdInsertado, $hash, 1);
						
						//-------------------------------------------------------------------------------------------------------------------------------------
						//Tenemos que crear en la tabla timeline la novedad ocurrida para cada destinatario.
						//Cargo el modelo donde estan los datos del timeline para cargar la novedad.
						$this->load->model('m_timeline');						
						
						//Busco todos los destinatarios activos de la notificacion recien creada
						$listadoDestinatarios = $this->m_destinatarioxnotificacion->buscarActivosEtapa2(" AND notificacion.idNotificacion=".$ultimoIdInsertado);
						
						//Recorremos todos los destinatarios y le agregamos la novedad al timeline
						foreach ($listadoDestinatarios->result() as $dest){
							//Creamos el registro de la novedad. TipoOperacion, idTablaOrigen, idRegistroOrigen, idTablaDestino, idRegistroDestino, fechaPasada, fechaFutura, estado
							$this->m_timeline->crear(1, 7, $ultimoIdInsertado, $dest->tipoDestinatario, $dest->idDestinatario, $fecha2, null, 1);
						}
												
						echo("<script> alert('La notificaci\u00f3n: ".$this->input->post('titulo',true)." se ha creado correctamente. ".$mensaje."');</script>");
					}else{
						echo("<script> alert('La notificaci\u00f3n: ".$this->input->post('titulo',true)." no se ha creado. Ha habido un error.');</script>");
					}
				} else {
					//Los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();			
				}
			} else {
				//No se han pasado los parametros minimos necesarios para crear un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();			
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo abre la pantalla con los datos de la notificacion pasada por la url
	//El segundo parametro solo se utiliza para volver a la pantalla consultar con el mismo criterio de filtrado o bien para avanzar o retroceder al siguiente registro.
	function abrirPantallaModificar($idNotificacion=null, $idCicloLectivo=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == '1')){
			//Segunda comprobacion: Que idNotificacion pasado sea numerico y mayor que cero. Ademas que idCicloLectivo pasado sea numerico y mayorque cero.
			if(is_numeric($idNotificacion) && $idNotificacion>0 && is_numeric($idCicloLectivo) && $idCicloLectivo>0){
				//Cargo el modelo donde estan los datos de las notificaciones registradas
				$this->load->model('m_notificacion');
				
				//Busco a la notificacion que hay que modificar para comprobar que existe
				$notificacion = $this->m_notificacion->get($idNotificacion);
				
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para comprobar que existe
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Tercera comprobacion: Que la notificacion sea existente. Ademas que el ciclo lectivo pasado por la url sea existente.
				if($notificacion->num_rows() == 1 && $cicloLectivo->num_rows() == 1){
					//Le paso la notificacion a modificar a la vista
					$datos['notificacionSel'] = $notificacion;
					
					//Le paso el ciclo lectivo que estaba seleccionado en la pantalla consultar
					$datos['idCicloLectivoSel'] = $idCicloLectivo;
					
					//Busco a la notificacion siguiente de la que hay que modificar
					$idNotificacionSig = $this->m_notificacion->getContiguo($idNotificacion,1, $idCicloLectivo);
					
					//Le paso la notificacion siguiente de la que hay que modificar a la vista
					$datos['idNotificacionSig'] = $idNotificacionSig;
					
					//Busco a la notificacion anterior del que hay que modificar
					$idNotificacionAnt = $this->m_notificacion->getContiguo($idNotificacion,-1, $idCicloLectivo);
					
					//Le paso la notificacion anterior de la que hay que modificar a la vista
					$datos['idNotificacionAnt'] = $idNotificacionAnt;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de los tipos de notificaciones
					$this->load->model('m_tipo_notificacion');
					
					//Busco todos los tipos de notificaciones y no solo los activos
					$listadoTiposNotificaciones = $this->m_tipo_notificacion->buscar();
					
					//Le paso el listado de todos los tipos de notificaciones a la vista para que los muestre en un combo seleccionable
					$datos['tiposNotificaciones'] = $listadoTiposNotificaciones;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de los destinatarios de las notificaciones y los modelos que se necesitan
					$this->load->model('m_destinatarioxnotificacion');
					
					//Cargo el modelo donde estan los datos de los ciclos lectivos, curso, divisiones y turnos registrados
					$this->load->model('m_ciclo_lectivo');
					$this->load->model('m_curso');
					$this->load->model('m_division');
					$this->load->model('m_turno');
					
					//Cargo el modelo donde estan los datos de los alumnos, tutores, docentes, directivos y personas registradas
					$this->load->model('m_alumno');
					$this->load->model('m_tutor');
					$this->load->model('m_docente');
					$this->load->model('m_directivo');
					$this->load->model('m_persona');
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////					
					//Cargo la vista donde se muestra el formulario para modificar una notificacion y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_notificaciones_modificar',$datos, true);
					
					//Cargo la vista principal con los datos de la vista para modificar un registro
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El o los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Este metodo realmente modifica los datos de una notificacion
	function modificar($idNotificacion=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == '1')){	   
			//Segunda comprobacion: Que se haya pasado por post la fecha de publicacion, el tipo de notificacion, el titulo y el estado de la notificacion a modificar. 
			//Ademas que se haya pasado por la url el id de la notificacion a modificar
			if(is_numeric($idNotificacion) && $idNotificacion>0 && $this->input->post('fechaPublicacion',true)!="" && is_numeric($this->input->post('tipoNotificacion',true)) && $this->input->post('tipoNotificacion',true)>0 && $this->input->post('titulo',true) != "" && ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){		
				//Cargo el modelo donde estan los datos de las notificaciones
				$this->load->model('m_notificacion');
				
				//Busco a la notificacion que hay que modificar para comprobar que existe
				$notificacion = $this->m_notificacion->get($idNotificacion);
				
				//Cargo el modelo donde estan los datos de los tipos de notificaciones
				$this->load->model('m_tipo_notificacion');
				
				//Busco al tipo de notificacion para comprobar que existe
				$tipoNotificacion = $this->m_tipo_notificacion->get($this->input->post('tipoNotificacion',true));
								
				//Tercera comprobacion: Que la notificacion pasada por la url sea existente. Lo mismo para el tipo de notificacion.
				if($notificacion->num_rows() == 1 && $tipoNotificacion->num_rows() == 1){
					//Guardamos el id del archivo actual. Cero si no tiene asignado ninguno
					$idArchivoActual = $notificacion->row()->idArchivo;					
					
					//Resultado 0 quiere decir que nada se ha modificado
					$resultado = 0;
					
					//Cargo el modelo donde estan los datos de los archivos
					$this->load->model('m_archivo');
					
					//Detalles de las configuraciones del archivo a subir
					$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/notificaciones";
					$config['allowed_types'] = 'gif|jpg|png|jpeg|doc|docx|xls|xlsx|pdf|ppt|xppt|pps';
					$config['max_size'] = '10000';
					$this->load->library('upload', $config);
					
					$archivo = '';
					//Si no se subio el archivo hacer lo siguiente
					if (!$this->upload->do_upload('archivo')){
						$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones.';
					//Si se subio el archivo hacer lo siguiente
					}else{
						//Datos del archivo subido
						$upload_data = $this->upload->data();
						$archivo = $upload_data['file_name'];
						$extensionArchivo = $upload_data['file_ext'];
						
						//Mensaje que se va a mostrar
						$mensaje = 'Se ha subido el archivo correctamente.';
						
						// Determine Content Type
						switch ($upload_data['file_ext']) {
						  case ".pdf": $ctype="application/pdf"; break;
						  case ".exe": $ctype="application/octet-stream"; break;
						  case ".zip": $ctype="application/zip"; break;
						  case ".doc": $ctype="application/msword"; break;
						  case ".xls": $ctype="application/vnd.ms-excel"; break;
						  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break;
						  case ".gif": $ctype="image/gif"; break;
						  case ".png": $ctype="image/png"; break;
						  case ".jpeg": 
						  case ".jpg": $ctype="image/jpg"; break;
						  default: $ctype="application/force-download";
						}
						
						//Si ya tenia archivo lo modificamos, si no tenia, creamos un nuevo registro en la base de datos
						$nuevoHash = random_string('alnum',20).$upload_data['file_ext'];
																		
						if($idArchivoActual != 0){
							//Modificamos el archivo en la base de datos
							$resultado += $this->m_archivo->modificar($idArchivoActual, $nuevoHash, $upload_data['file_name'], $upload_data['file_ext'], $ctype);
						}else{
							//Creamos el archivo en la base de datos
							$resultado += $this->m_archivo->crear($nuevoHash, $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/notificaciones", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
							$idArchivoActual = $this->db->insert_id();
						}
					}					
					
					//Formato fecha ARGENTINA
					$fecha1=$this->input->post('fechaPublicacion',true);
					//Formato fecha EEUU
					if($fecha1!="")$fecha2=date("Y-m-d",strtotime($fecha1));
					else $fecha2=null;
					
					//Modificamos la notificacion
					$resultado += $this->m_notificacion->modificar($idNotificacion, $fecha2, $this->input->post('tipoNotificacion',true), $this->input->post('titulo',true), $this->input->post('descripcion',true), $idArchivoActual, $this->input->post('estado',true));
					
					if($archivo != '')	echo("<script> window.parent.actualizarArchivo('".base_url() .'archivo/hash/'.$nuevoHash."');</script>");
					
					if($resultado >= 1){
						//-------------------------------------------------------------------------------------------------------------------------------------
						//Tenemos que crear en la tabla timeline la novedad MODIFICADA para cada destinatario.
						
						//Cargo el modelo donde estan los datos del timeline para cargar la novedad.
						$this->load->model('m_timeline');
						
						//Cargo el modelo donde estan los datos de los destinatarios de una notificacion
						$this->load->model('m_destinatarioxnotificacion');
						
						//Busco todos los destinatarios activos de la notificacion recien modificada
						$listadoDestinatarios = $this->m_destinatarioxnotificacion->buscarActivosEtapa2(" AND notificacion.idNotificacion=".$idNotificacion);
						
						//Esto se utiliza ya que si la fecha de publicacion es mayor a la de hoy, no se debe ver hasta ese momento la novedad en el timeline
						//pero si la fecha de publicacion es menor a la de hoy, debe verse el cambio inmediatamente.
						$hoy = date("Y-m-d");						
						if($fecha2<$hoy) $fecha2 = $hoy;
						
						//Recorremos todos los destinatarios y le agregamos la novedad al timeline
						foreach ($listadoDestinatarios->result() as $dest){
							//Creamos el registro de la novedad. TipoOperacion, idTablaOrigen, idRegistroOrigen, idTablaDestino, idRegistroDestino, fechaPasada, fechaFutura, estado
							$this->m_timeline->crear(2, 7, $idNotificacion, $dest->tipoDestinatario, $dest->idDestinatario, $fecha2, null, 1);
						}
						
						echo("<script> alert('La notificaci\u00f3n: ".$this->input->post('titulo',true)." se ha modificado correctamente. ".$mensaje."');</script>");
					}else{
						echo("<script> alert('La notificaci\u00f3n: ".$this->input->post('titulo',true)." no se ha modificado. Ha habido un error o los datos permanecieron iguales.');</script>");
					}
				} else {
					//El o los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Esto metodo SOLO se puede llamar con ajax
	//Este metodo se usa en la pantalla crear y modificar notificacion cuando se cambia la seleccion del combo de alcance general y hay que actualizar el combo de alcance particular
	function actualizarAlcanceParticular($tipoAlcance=null){
	    //Primera comprobacion: Que el usuario tenga iniciada sesion
		if($this->session->userdata('sesionIniciada') == 'Si'){
			//Segunda comprobacion: Que tipoAlcance sea numerico y mayor o igual que cero y menor o igual que 25.
			if(is_numeric($tipoAlcance) && $tipoAlcance>=0 && $tipoAlcance<=25){
				//Buscamos segun el tipo de alcance a todos los registros correctos
				
				//Si es igual a cero completar un select vacio
				if($tipoAlcance==0){
					echo('<option value="0" selected="selected">Seleccionar</option>');
				}
				
				//De 1 a 5 tenemos que buscar todos los ciclos
				if($tipoAlcance>=1 && $tipoAlcance<=5){
					//Cargo el modelo donde estan los datos de los ciclos registrados para pedirle un listado con todos ellos
					$this->load->model('m_ciclo_lectivo');
					
					//Busco todos los ciclos lectivos
					$listadoCiclosLectivos = $this->m_ciclo_lectivo->buscar();
					
					//Le paso el listado de todos los ciclos lectivos a la vista para que los muestre en un combo
					$datos['ciclosLectivos'] = $listadoCiclosLectivos;
					
					//Cargo la vista donde se arma el combo
					$this->load->view('v_ciclos_lectivos_select',$datos);				
				}
				
				//De 6 a 10 tenemos que buscar todos los cursos
				if($tipoAlcance>=6 && $tipoAlcance<=10){
					//Cargo el modelo donde estan los datos de los cursos registrados para pedirle un listado con todos ellos
					$this->load->model('m_curso');
					
					//Busco todos los cursos activos
					$listadoCursos = $this->m_curso->buscarActivos("", "cicloLectivo ASC, curso.nombre ASC");
					
					//Le paso el listado de todos los cursos a la vista para que los muestre en un combo
					$datos['cursos'] = $listadoCursos;
					
					//Cargo la vista donde se arma el combo
					$this->load->view('v_cursos_select2',$datos);				
				}
				
				//De 11 a 15 tenemos que buscar todas las divisiones
				if($tipoAlcance>=11 && $tipoAlcance<=15){
					//Cargo el modelo donde estan los datos de las divisiones registradas para pedirle un listado con todas ellas
					$this->load->model('m_division');
					
					//Busco todas las divisiones activas
					$listadoDivisiones = $this->m_division->buscarActivos("", "cicloLectivo ASC, curso.nombre ASC, division.nombre ASC");
					
					//Le paso el listado de todas las divisiones a la vista para que las muestre en un combo
					$datos['divisiones'] = $listadoDivisiones;
					
					//Cargo la vista donde se arma el combo
					$this->load->view('v_divisiones_select2',$datos);				
				}
				
				//De 16 a 20 tenemos que buscar todos los turnos
				if($tipoAlcance>=16 && $tipoAlcance<=20){
					//Cargo el modelo donde estan los datos de los turnos registrados para pedirle un listado con todos ellos
					$this->load->model('m_turno');
					
					//Busco todos los turnos activos
					$listadoTurnos = $this->m_turno->buscarActivos();
					
					//Le paso el listado de todos los turnos la vista para que las muestre en un combo
					$datos['turnos'] = $listadoTurnos;
					
					//Cargo la vista donde se arma el combo
					$this->load->view('v_turnos_select',$datos);				
				}
				
				//Si es igual a 21 tenemos que buscar todos los alumnos
				if($tipoAlcance==21){
					//Cargo el modelo donde estan los datos de los alumnos registrados para pedirle un listado con todos ellos
					$this->load->model('m_alumno');
					
					//Busco todos los alumnos activos
					$listadoAlumnos = $this->m_alumno->buscarActivos();
					
					//Le paso el listado de todos los alumnos la vista para que las muestre en un combo
					$datos['alumnos'] = $listadoAlumnos;
					
					//Cargo la vista donde se arma el combo
					$this->load->view('v_alumnos_select',$datos);				
				}
				
				//Si es igual a 22 tenemos que buscar todos los tutores
				if($tipoAlcance==22){
					//Cargo el modelo donde estan los datos de los tutores registrados para pedirle un listado con todos ellos
					$this->load->model('m_tutor');
					
					//Busco todos los tutores activos
					$listadoTutores = $this->m_tutor->buscarActivos();
					
					//Le paso el listado de todos los tutores la vista para que las muestre en un combo
					$datos['tutores'] = $listadoTutores;
					
					//Cargo la vista donde se arma el combo
					$this->load->view('v_tutores_select',$datos);				
				}
				
				//Si es igual a 23 tenemos que buscar todos los docentes
				if($tipoAlcance==23){
					//Cargo el modelo donde estan los datos de los docentes registrados para pedirle un listado con todos ellos
					$this->load->model('m_docente');
					
					//Busco todos los docentes activos
					$listadoDocentes = $this->m_docente->buscarActivos();
					
					//Le paso el listado de todos los docentes la vista para que las muestre en un combo
					$datos['docentes'] = $listadoDocentes;
					
					//Cargo la vista donde se arma el combo
					$this->load->view('v_docentes_select',$datos);				
				}
				
				//Si es igual a 24 tenemos que buscar todos los directivos
				if($tipoAlcance==24){
					//Cargo el modelo donde estan los datos de los directivos registrados para pedirle un listado con todos ellos
					$this->load->model('m_directivo');
					
					//Busco todos los directivos activos
					$listadoDirectivos = $this->m_directivo->buscarActivos();
					
					//Le paso el listado de todos los directivos la vista para que las muestre en un combo
					$datos['directivos'] = $listadoDirectivos;
					
					//Cargo la vista donde se arma el combo
					$this->load->view('v_directivos_select',$datos);				
				}
				
				//Si es igual a 25 tenemos que buscar todas las personas
				if($tipoAlcance==25){
					//Cargo el modelo donde estan los datos de las personas registradas para pedirle un listado con todos ellos
					$this->load->model('m_persona');
					
					//Busco todas las personas activas
					$listadoPersonas = $this->m_persona->buscarActivos();
					
					//Le paso el listado de todas las personas la vista para que las muestre en un combo
					$datos['personas'] = $listadoPersonas;
					
					//Cargo la vista donde se arma el combo
					$this->load->view('v_personas_select',$datos);
				}
			} else {
				//No se han pasado los parametros minimos necesarios.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();			
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}		
	}
}